﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Entities;
using BusinessLogicLayer.Validation;
using DataAccessLayer;

namespace BusinessLogicLayer
{
    public class QLyTKBDeNghiManager:IValidation<QLTKBDeNghi>
    {
        private readonly IRepository<QLTKBDeNghi> _repository;

        public QLyTKBDeNghiManager(IRepository<QLTKBDeNghi> itr)
        {
            _repository = itr;
        }

        public ValidationResult Validate(QLTKBDeNghi TKBDeNghi)
        {
            var toResult = new ValidationResult();
            try
            {
                if (string.IsNullOrEmpty(TKBDeNghi.MaDN.ToString().Trim()))
                    toResult.Messages.Add("Mã đề nghị không được để trống");
                if (string.IsNullOrEmpty(TKBDeNghi.Tuan.ToString().Trim()) || TKBDeNghi.Tuan <= 0 || TKBDeNghi.Tuan>53)
                    toResult.Messages.Add("Tuần không được bằng 0, lớn hơn 53 hay để trống");
                if (string.IsNullOrEmpty(TKBDeNghi.NgayLap.ToString().Trim()))
                    toResult.Messages.Add("Ngày Lập không được để trống");              
                if (string.IsNullOrEmpty(TKBDeNghi.TuNgay.ToString().Trim()))
                    toResult.Messages.Add("Ngày bắt đầu tuần không được để trống");                
            }
            catch (Exception)
            {

            }
            return toResult;
        }

        public ActionResult InsertOrUpdate(QLTKBDeNghi TKBDeNghi)
        {
            var iouResult = new ActionResult();
            try
            {
                if (!_repository.InsertOrUpdate(TKBDeNghi))
                    iouResult.ex.Add(new Exception("Thêm TKB Đề Nghị không thành công"));
            }
            catch (Exception e)
            {
                iouResult.ex.Add(e);
            }
            return iouResult;
        }

        public ActionResult Delete(QLTKBDeNghi TKBDeNghi)
        {
            var dResult = new ActionResult();
            try
            {
                if (!_repository.Delete(TKBDeNghi))
                    dResult.ex.Add(new Exception("Xóa TKB Đề Nghị không thành công!"));
            }
            catch (Exception e)
            {
                dResult.ex.Add(e);
            }
            return dResult;
        }

        public ActionResult Delete(string idGV)
        {
            var dResult = new ActionResult();
            try
            {
                if (!_repository.Delete(id => id.MaDN == idGV))
                    dResult.ex.Add(new Exception("Xóa TKB Đề Nghị không thành công! "));
            }
            catch (Exception e)
            {
                dResult.ex.Add(e);
            }
            return dResult;
        }

        public ActionResultAsList<QLTKBDeNghi> Find(Expression<Func<QLTKBDeNghi, bool>> predicate)
        {
            var fResult = new ActionResultAsList<QLTKBDeNghi>();
            try
            {
                fResult.Result = _repository.Find(predicate).ToList();
                if (fResult.Result.Count == 0)
                    fResult.ex.Add(new Exception("Không tìm thấy TKB Đề Nghị phù hợp"));
            }
            catch (Exception e)
            {
                fResult.ex.Add(e);
            }
            return fResult;
        }
    }
}
